package com.cangshi.dao;

import com.cangshi.entity.Task;
import com.cangshi.entity.User;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface TaskMapper {
    int deleteByPrimaryKey(Integer taskId);

    int insert(Task record);

    /**
     * 新建任务
     */

    int insertSelective(Task record);

    /**
     * 查询上次访问TaskId
     */
    int selectLastTaskId();

    Task selectByPrimaryKey(Integer taskId);

    int updateByPrimaryKeySelective(Task record);

    int updateByPrimaryKey(Task record);

    int insertTask(Task record);

    /**
     * 修改任务状态
     */

    int updateTaskState(@Param(value = "taskId") Integer taskId, @Param(value = "userId") Integer userId, @Param(value = "taskState") Integer taskState);

    /**
     * 分页查询个人历史任务
     */
    List<Task> selectTaskByUserId(@Param(value = "startPos") Integer startPos, @Param(value = "pageSize") Integer pageSize, @Param(value = "userId") Integer userId);

    /**
     * 通过user_id查询一个用户所有的历史任务条数
     */
    int selectHistoryTask(Integer userId);

    /**
     * 查询一个任务所有详情
     *
     * @param taskId 任务Id
     * @return
     */
    Task selectOneTaskOverallInfo(Integer taskId);


    /**
     * 查询通过筛选查询任务的任务总条数，用于分页使用 （此为用户未登录的筛选）
     */

    int selectTaskByscreenAllNumber(@Param(value = "minMoney") Double minMoney,
                                    @Param(value = "maxMoney") Double maxMoney,
                                    @Param(value = "taskType") Integer taskType,
                                    @Param(value = "distance") Integer distance,
                                    @Param(value = "keyword") String keyword,
                                    @Param(value = "latitude") Double latitude,
                                    @Param(value = "longitude") Double longitude);


    /**
     * 通过筛选查询任务（此为用户未登录的筛选）
     */
    List<Task> selectTaskByscreen(@Param(value = "minMoney") Double minMoney,
                                  @Param(value = "maxMoney") Double maxMoney,
                                  @Param(value = "taskType") Integer taskType,
                                  @Param(value = "distance") Integer distance,
                                  @Param(value = "keyword") String keyword,
                                  @Param(value = "startPos") Integer startPos,
                                  @Param(value = "pageSize") Integer pageSize,
                                  @Param(value = "latitude") Double latitude,
                                  @Param(value = "longitude") Double longitude);

    /**
     * 查询任务用于主页显示(分页显示)
     */
    List<Task> selectTaskUsedForHomePage(@Param(value = "startPos") Integer startPos,
                                         @Param(value = "pageSize") Integer pageSize);

    /**
     * 查询用于主页显示的任务总条数
     */
    int selectTaskUsedForHomePageNum();

    /**
     * 查询通过筛选查询任务的任务总条数，用于分页使用 （此为用户登录状态下的筛选）
     */

    int selectTaskByscreenAllNumberLand(@Param(value = "minMoney") Double minMoney,
                                        @Param(value = "maxMoney") Double maxMoney,
                                        @Param(value = "taskType") Integer taskType,
                                        @Param(value = "distance") Integer distance,
                                        @Param(value = "keyword") String keyword,
                                        @Param(value = "latitude") Double latitude,
                                        @Param(value = "longitude") Double longitude,
                                        @Param(value = "sex") Integer sex,
                                        @Param(value = "userAge") Integer userAge);

    /**
     * 通过筛选查询任务（此为用户登录状态下的筛选）
     */
    List<Task> selectTaskByscreenLand(@Param(value = "minMoney") Double minMoney,
                                      @Param(value = "maxMoney") Double maxMoney,
                                      @Param(value = "taskType") Integer taskType,
                                      @Param(value = "distance") Integer distance,
                                      @Param(value = "keyword") String keyword,
                                      @Param(value = "startPos") Integer startPos,
                                      @Param(value = "pageSize") Integer pageSize,
                                      @Param(value = "latitude") Double latitude,
                                      @Param(value = "longitude") Double longitude,
                                      @Param(value = "sex") Integer sex,
                                      @Param(value = "userAge") Integer userAge);
    /**
     *强制修改任务过期
     */

    int updateTaskStateOverdue();
}